package com.web.util;

/**
 * Created by root on 7/27/15.
 */

import org.apache.log4j.Logger;

import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.Graphics;
import javax.imageio.ImageIO;

public class ImageCut {

    /*新建logger对象*/
    private static final Logger LOGGER = Logger.getLogger(ImageCut.class);


    /**
     * @param srcImageFile 源图像地址
     * @param x            目标切片起点x坐标
     * @param y            目标切片起点y坐标
     * @param destWidth    目标切片宽度
     * @param destHeight   目标切片高度
     */

    public static String abscut(String srcImageFile, File desImageFile, int x, int y, int destWidth, int destHeight) {

        try {
            Image img;
            ImageFilter cropFilter;
            // 读取源图像
            BufferedImage bi = ImageIO.read(new File(srcImageFile));
            int srcWidth = bi.getWidth(); // 源图宽度
            int srcHeight = bi.getHeight(); // 源图高度

            /*以下代码并没有什么意义，在我现在看来*/
//            if (srcWidth < destWidth) {
//                destWidth = srcWidth;
//            }

            /*这个判断条件是个什么鬼啊，忠诚你在干嘛啊*/
//            if (srcWidth >= destWidth && srcHeight >= destHeight) {
            if (srcWidth>0) {
                Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);

                /* ****************************************
                *  判断原图的宽高和DIV宽高的大小
                *  根据图片外层DIV的宽度，选择的起始点则有相对变化
                *************************************** */

                /*这里的480是根据cutImage.jsp中的div宽度得到的，并没有什么科学的根据，还没进行大规模测试*/

                int x1 = x * srcWidth / 480;
                int y1 = y * srcWidth / 480;
                //int w = destWidth;
                //int h = destHeight;
                int w = destWidth * srcWidth / 480;
                int h = destHeight * srcWidth / 480;

                // 四个参数分别为图像起点坐标和宽高
                // 即: CropImageFilter(int x,int y,int width,int height)
                cropFilter = new CropImageFilter(x1, y1, w, h);
                img = Toolkit.getDefaultToolkit().createImage(
                        new FilteredImageSource(image.getSource(), cropFilter));
                BufferedImage tag = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
                Graphics g = tag.getGraphics();
                g.drawImage(img, 0, 0, null); // 绘制缩小后的图
                g.dispose();
                // 输出为文件
                //File desImageFile = new File(srcImageFile);
                String filename = desImageFile.getName();

                LOGGER.error("upload filename: " + filename);

                /*裁剪原来的图片，写入格式jpg*/
                ImageIO.write(tag, "jpg", desImageFile);

                /*为了防止图片上传格式不是jpg，在这里将图片后缀名改成jpg*/
                if (srcImageFile.indexOf(".") >= 0) {
                    String picPostFix = filename.substring(filename.lastIndexOf("."), filename.length());
                    if (!(picPostFix.equals("jpg") || picPostFix.equals("JPG"))) {
                        filename = srcImageFile.substring(0, srcImageFile.lastIndexOf("."));
                        LOGGER.error("重命名的图片路径: " + filename + ".jpg");
                        File file = new File(filename + ".jpg");
//                        desImageFile.renameTo(file);
//                        return file.getName();
                        new File(srcImageFile).renameTo(file);
                    }
                }
                return desImageFile.getName();
            } else {
                LOGGER.error("出了鬼了,明明不可能出现这种情况的,图片剪裁...");
            }
        } catch (Exception exception) {
            LOGGER.error("裁剪图像出错...", exception);
            return "";
        }
        return "";
    }
}

